// 这个文件是对axios进行二次封装操作
import axios from "axios";
import NPorgress from "nprogress";
import "nprogress/nprogress.css";

const instance = axios.create({
  baseURL: "/api", // 基础路径
  timeout: 20000, // 超时时长
});

// 请求拦截
instance.interceptors.request.use(
  function(config) {
    // 请求拦截器一般只处理成功的内容，不会处理失败的内容
    // 无论是请求拦截还是响应拦截，都会处理两件事情
    // 1.修改请求报文和响应报文
    // 2.添加额外功能
    NPorgress.start(); // 进度条开始
    return config; // 允许你进行继续的请求，发送的报文就是新的config对象内容
  },
  function(error) {
    // 错误处理
    return Promise.reject(error);
  }
);

// 响应拦截修改为直接返回的数据
instance.interceptors.response.use(
  function(response) {
    // 默认返回的 response 是我们的响应报文信息，如果要拿到数据，只需要 response.data
    // 现在可以在返回响应之前直接去修改数据，那么，以后我们将不需要再拿数据的操作了，也就是 res.data
    NPorgress.done(); // 进度条结束
    return response.data;
  },
  function(error) {
    NPorgress.done();
    alert("发送请求失败：" + error.message || "未知错误");
    return new Promise(() => {});
  }
);

export default instance; // 暴露我们的axios工具，后面可以发送请求使用
